const express = require("express");
const jwt = require("jsonwebtoken");
const app = express();
const bodyParser = require("body-parser"); // 正确引入 bodyParser

// 设置 接收post请求数据 req.body
app.use(bodyParser.urlencoded({ extended: false }));

const main = require("./router/main");
require("./database/init");

// 设置跨域和相应数据格式  
app.all('*', function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Headers', 'X-Requested-With, mytoken')
  res.header('Access-Control-Allow-Headers', 'X-Requested-With, Authorization')
  res.setHeader('Content-Type', 'application/json;charset=utf-8')
  res.header('Access-Control-Allow-Headers', 'Origin,Content-Type,Content-Length, Authorization, Accept,X-Requested-With')
  res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
  res.header('X-Powered-By', ' 3.2.1')
  res.header('Access-Control-Allow-Credentials', true); // 如果需要凭证
  if (req.method == 'OPTIONS') res.send(200)
  /*让options请求快速返回*/ else next()
})

// 拦截下/ 下所有的请求 验证token
// 当用户访问网站的 根路径（/） 时，服务器会返回一个 404 Not Found 的自定义 JSON 响应，表示该路径没有对应的资源。
app.get("/", (req, res) => {
  res.status(404),
    send({
      data: null,
      meta: {
        msg: "NOT Found",
        status: 404,
      },
    });
});

app.use("/api", (req, res, next) => {
  //.判断是否是登陆接口 或 是 注册接口 如果是 直接放行 返回
  if (req.url == "/login" || req.url == "/register") {
    next();
    return;
  }
  // 接收客户端传递过来的 token
  const token = String(req.headers.authorization);
  // 解析token
  const username = jwt.decode(token, "xiaoke");
  //判断客户端是否传递了token
  if (token == "undefined" || username == null) {
    res.status(400).send({
      data: null,
      meta: {
        msg: "token无效",
        status: 400,
      },
    });
    return;
  }
  //直接放行
  next();
});

//为main匹配 地址为/api
app.use("/api", main);

require("./database/model/User");
// 监听8888端口
app.listen(8888);
